import { observe } from './observer/index.js'
export function initState(vm) {
    const opts = vm.$options;
    // vue的数据来源 属性 方法 数据 计算属性 watch
    if (opts.props) {
        initProps(vm);
    }
    if (opts.methods) {
        initMethod(vm);
    }
    if (opts.data) {
        initData(vm);
    }
    if (opts.computed) {
        initComputed(vm);
    }
    if (opts.watch) {
        initWatch(vm);
    }
}

function initProps() { }
function initMethod() { }

// function proxy(vm, source, key) {
//     Object.defineProperty(vm, key, { // 给vm添加了监听属性
//         get() {
//             return vm[source][key]
//         },
//         set(newValue) {
//             return vm[source][key] = newValue
//         }
//     })
// }

function initData(vm) {
    // 数据初始化工作
    let data = vm.$options.data; //用户传递的data
    data = vm._data = typeof data === 'function' ? data.call(vm) : data; //如果data是一个函数，就直接执行，并把this指向vue实例，否则就获取data对象
    // 对象劫持，用户改变了数据 我希望可以得到通知 => 刷新页面
    // MVVM 模式 数据变化驱动视图变化
    // Object.defineProperty() 给属性添加get方法和set方法

    // for (let key in data) {
    //     proxy(vm, "_data", key)
    // }


    observe(data); // 响应式原理
}
function initComputed() { }
function initWatch() { }

